<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--
    js常用对象
     1.对象  object  {}  字面量创建创建对象
     2. new Object()
     3. new 构造函数

   注意:
     1.如果 new 了函数内的 this 会指向当前这个 person 并且就算函数内部不 return 也会返回一个对象。
     2.如果不 new 的话函数内的 this 指向的是 window。

    在 JavaScript 中，值类型（基本类型）本身不是对象，因此它们不直接拥有属性和方法。
    基本类型包括 Number、String、Boolean、Null、Undefined 和 Symbol, 这些类型的值都是简单的数据，而不是复杂的数据结构。
   然而，JavaScript 为每种基本类型都提供了一个对应的包装对象。当你尝试访问一个基本类型的属性或方法时，
   JavaScript 会临时地将这个基本类型的值转换为对应的包装对象，以便可以调用该对象上的属性和方法。
   这种转换是自动进行的，通常被称为“装箱”。一旦属性和方法的使用完毕，这个临时对象就会被销毁，值又恢复为其原始的基本类型。

   Integer i = 1
   int  i = 1
-->

<script>


  var  b = true
  var b2 = new  Boolean(true)


   var n = 1
   console.log(typeof  n)   //  number
   var  n2 = new Number(1)
   console.log(n2)
   console.log(typeof n2)  //  object
   console.log(n2.valueOf())


   console.log("------------------------------------")
   var  str = "hello"  // string
   var  str2 = new String("hello")  //  object
   var n3 = new Object("2")
   console.log(typeof n3)
   console.log(n3)
   console.log(n3.valueOf())

   // 通过字面量创建对象
    var student = {
        stuName:'张三',
        age:20
    }

   console.log(student)
   console.log(typeof  student)

   console.log("-----------------------------------")
   var  person = new Object()
   person.name = '李四'
   person.age = 20
   console.log(person)
   console.log(typeof  person)


   console.log("----------------构造函数创建对象------------------")

   // function add(n1,n2){
   //   return n1+n2
   // }

   // 通过调用构造函数创建对象
   function teacher(name,age,sex){
        this.name = name;
        this.age = age;
        this.sex = sex
        this.teach = function (){
          console.log("教学")
        }

        return this
   }

   var  teacher1 = new teacher("张三",20,'男')
   console.log(teacher1)
   console.log(teacher1.age)
   console.log(teacher1.name)
   console.log(teacher1.sex)
   console.log(typeof teacher1)

   console.log("---------------函数不同调用方式的区别-----------------------")

   //  new    创建对象    this -> 当前对象
   var  teacher2 = new teacher("李四",25,'男')
   console.log(teacher2)
   teacher2.teach()

   // 通过函数名直接调用函数   this  -> window
  var teacher3 =  teacher("王五",25,'男')
   console.log(teacher3)
   console.log(teacher3.name)
   console.log(teacher3.age)
   console.log(teacher3.sex)
   teacher3.teach()




</script>
</body>
</html>